package main

import (
	"fmt"
	"helloword01/31chatroom/common/db/redis"
	"helloword01/31chatroom/common/db/userDao"
	"helloword01/31chatroom/server/processor"
	"io"
	"net"
	"time"
)

func main() {
	fmt.Println("服务端监听8889，服务端等待客户端连接...")
	listen, err := net.Listen("tcp", "0.0.0.0:8889")
	if err != nil {
		fmt.Println("服务端监听8889 err=", err)
		return
	}
	defer func(listen net.Listener) {
		err := listen.Close()
		if err != nil {
			fmt.Println("服务端监听关闭异常 Error=", err)
			return
		}
	}(listen)

	//循环等待客户端连接
	for {
		//建立连接
		conn, err := listen.Accept()
		if err != nil {
			fmt.Println("连接建立失败 err=", err)
			return
		}
		fmt.Println("客户端:", conn.LocalAddr().String(), "连接成功~")

		//开启协程，处理客户端的连接
		go process(conn)
	}
}

// process
//
//	@Description: 处理客服端的通讯
//	@param conn
//	@return {}
func process(conn net.Conn) {
	defer func(conn net.Conn) {
		err := conn.Close()
		if err != nil {
			fmt.Println("服务端关闭连接异常 Error=", err)
			return
		}
	}(conn)
	p := &processor.Processor{
		Conn: conn,
	}
	err := p.Process()
	if err != nil {
		if err == io.EOF {
			fmt.Println("客户端[", conn.RemoteAddr().String(), "]退出")
		} else {
			fmt.Println("客户端[", conn.RemoteAddr().String(), "]异常退出")
		}
	}

}

// init
//
//	@Description: 初始化数据
func init() {
	initRedisPool()
	initUserDao()
}

func initRedisPool() {
	fmt.Println("initRedisPool....")
	redis.InitPool("localhost:6379", 16, 0, 300*time.Second)
}
func initUserDao() {
	fmt.Println("initUserDao....")
	userDao.InitUserDao(redis.Pool)
}
